Практическое задание 4: Authentication & Security
🔐 Аутентификация и безопасность - Завершение архитектуры веб-приложения
📋 Описание задания
К предыдущему приложению (лендинг + API + БД) прикрутить авторизацию - в базе данных сделать миграцию с новой таблицей пользователей, пароли должны храниться безопасно. Создать полноценную систему аутентификации с регистрацией, входом в систему и защитой API endpoints.
🎯 Цели задания
- Изучение аутентификации и авторизации
- Работа с миграциями базы данных
- Безопасное хранение паролей
- Настройка JWT токенов и middleware
- Понимание CORS и валидации данных
- Завершение архитектуры веб-приложения
📝 Требования к выполнению
Основные требования:
- Миграция базы данных - создать таблицу
usersс безопасным хранением паролей - API для аутентификации:
POST /api/register- регистрация пользователяPOST /api/login- вход в систему
- Защита существующих endpoints - добавить middleware для проверки JWT токенов
- Безопасность - хеширование паролей, валидация данных, CORS
- Интеграция с фронтендом - обновить лендинг для работы с аутентификацией
📊 Система оценивания
- Полное выполнение: Максимальная оценка (2 балла)
- Частичное выполнение: Преподаватель дает обратную связь и просит переделать
- Пересдача: Возможна после исправления замечаний
🛠 Технические требования
API Endpoints:
POST /api/register- регистрация (email, password) → JWT tokenPOST /api/login- вход (email, password) → JWT tokenPOST /api/form- защищенный endpoint (требует JWT в заголовке Authorization)GET /api/profile- профиль пользователя (опционально)
Безопасность:
- Хеширование паролей - использовать bcrypt или аналогичный алгоритм
- JWT токены - для аутентификации и авторизации
- Валидация данных - проверка email, длины пароля, обязательных полей
- CORS настройки - безопасные настройки для кросс-доменных запросов
- Middleware - проверка JWT токенов для защищенных endpoints
🔗 Полезные ресурсы
Аутентификация и безопасность:
- JWT.io - JWT токены и отладка
- bcrypt - хеширование паролей
- jsonwebtoken - работа с JWT в Node.js
- express-rate-limit - ограничение запросов
Безопасность:
📋 Чек-лист выполнения
База данных:
- [ ] Создана миграция для таблицы
users - [ ] Пароли хешируются с помощью bcrypt
- [ ] Email имеет уникальное ограничение
- [ ] Добавлены поля created_at и updated_at
Backend API:
- [ ] Реализован
POST /api/registerс хешированием паролей - [ ] Реализован
POST /api/loginс генерацией JWT токенов - [ ] Добавлен middleware для проверки JWT токенов
- [ ] Защищен существующий
POST /api/form(требует аутентификации) - [ ] Добавлена валидация всех входных данных
- [ ] Настроены CORS для безопасных запросов
Frontend:
- [ ] Создана страница регистрации
- [ ] Создана страница входа
- [ ] Обновлена форма лендинга для работы с аутентификацией
- [ ] Добавлено сохранение JWT токена в localStorage
- [ ] Реализована отправка токена в заголовке Authorization
Интеграция:
- [ ] Протестирована полная цепочка: регистрация → вход → защищенные API
- [ ] Данные формы сохраняются только для авторизованных пользователей
- [ ] Проверена работа без токена (должна возвращать 401)
- [ ] Проверена работа с неверным токеном (должна возвращать 401)
🧪 Тестирование
Обязательные тесты:
- Регистрация пользователя - создание нового аккаунта
- Вход в систему - получение JWT токена
- Защищенные endpoints - доступ только с валидным токеном
- Хеширование паролей - пароли не хранятся в открытом виде
- Валидация данных - проверка email, длины пароля